import os
import shutil
from pathlib import Path
import pandas as pd
from .constants import DCE_DATA_PATH, DCE_FUTURES
from catcher.config import FUTURES_CONFIG

class DataProcessor:
    def __init__(self):
        self.source_path = Path(DCE_DATA_PATH)
        self.target_base_path = Path("F:/资料/历史数据/已处理/大商所/step01")
        self.futures_config = FUTURES_CONFIG
        # 创建品种名称到分组的映射
        self.name_to_group = {}
        self._create_name_mapping()
        
    def _create_name_mapping(self):
        """创建品种名称到分组的映射"""
        for group_name in self.futures_config.keys():
            # 分割组名，如"豆油#棕榈油" -> ["豆油", "棕榈油"]
            product_names = group_name.split('#')
            for name in product_names:
                self.name_to_group[name] = group_name
        
    def get_group_name(self, product_name):
        """根据品种名称获取对应的分组名称"""
        return self.name_to_group.get(product_name)
        
    def create_target_folders(self):
        """创建目标文件夹"""
        # 确保基础目录存在
        self.target_base_path.mkdir(parents=True, exist_ok=True)
        
        # 为每个分组创建文件夹
        for group_name in self.futures_config.keys():
            group_path = self.target_base_path / group_name
            group_path.mkdir(exist_ok=True)
                
    def process_files(self):
        """处理数据文件"""
        print("开始处理数据文件...")
        
        # 创建目标文件夹
        self.create_target_folders()
        
        # 遍历源数据目录
        for year_dir in self.source_path.iterdir():
            if not year_dir.is_dir():
                continue
                
            year = year_dir.name
            print(f"\n处理 {year} 年数据...")
            
            # 遍历年份目录下的所有文件
            for file_path in year_dir.glob('*'):
                if not file_path.is_file():
                    continue
                    
                # 解析文件名
                file_name = file_path.stem  # 不包含扩展名的文件名
                ext = file_path.suffix
                
                # 获取品种名称（文件名格式为 "code_name"）
                if '_' in file_name:
                    product_name = file_name.split('_')[1]
                else:
                    # 如果文件名不符合格式，跳过
                    print(f"跳过不符合命名规范的文件: {file_path}")
                    continue
                    
                # 获取分组名称
                group_name = self.get_group_name(product_name)
                if not group_name:
                    print(f"跳过未配置的品种: {product_name}")
                    continue
                    
                # 构建新的文件名（添加年份）
                new_file_name = f"{file_name}_{year}{ext}"
                
                # 构建目标路径
                target_path = self.target_base_path / group_name / new_file_name
                
                # 复制文件
                try:
                    shutil.copy2(file_path, target_path)
                    print(f"已复制: {file_path.name} -> {target_path}")
                except Exception as e:
                    print(f"复制文件失败 {file_path.name}: {str(e)}")
                    
        print("\n数据处理完成！")

